/*
 * @Descripttion: 操作控制逻辑
 * @version: 
 * @Author: 一氧化二氢
 * @Date: 2022-01-01 00:01:15
 * @lastEditorTime: Do no edit
 */
//导入jwt
const  jwt = require("jsonwebtoken")
//导入jwt密钥
const {JWT_SECRET}= require('../config/config.default') 
const { createUser, getUserInfo,updateById } = require('../service/user.service')
const { userRegisterError,changePasswordError } = require('../constant/err.type')
class UserController {

    /**
     * @name: 
     * @test: test font
     * @msg: 用户注册方法
     * @param {*} ctx
     * @param {*} next
     */
    async register(ctx, next) {
        //1、获取数据
        const { user_name, password } = ctx.request.body
        //2、操作数据库
        try {
            const res = await createUser(user_name, password)
            //3、返回结果
            ctx.body = {
                code: 0,
                message: "用户注册成功",
                result: {
                    id: res.id,
                    user_name: res.user_name,
                }
            }
        } catch (err) {
            console.log("用户注册失败",err)
            return ctx.app.emit("error", userRegisterError)
        }

    }
    /**
     * @name: 
     * @test: test font
     * @msg: 用户登录方法
     * @return {*}
     * @param {*} ctx
     * @param {*} next
     */
    async login(ctx, next) {
        const { user_name } = ctx.request.body
        
        try{
            //1.获取用户信息(在token的payload中，记录id,user_name,is_admin)
           const {password,...res} = await getUserInfo({user_name}) //将password单独拿出,把剩下的键值对放到resUser中
            //登录成功则颁发token 
           ctx.body = {
                code:0,
                message:'用户登录成功',
                result:{
                    token:jwt.sign(res,JWT_SECRET,{expiresIn:'1d'})
                }
            }
        }catch(err){
            console.error("用户登录失败",err)
        }
        //2.
    }
    /**
     * @name: 
     * @test: test font
     * @msg: 修改密码
     * @return {*}
     * @param {*} ctx
     * @param {*} next
     */
    async changePassword(ctx,next){
        //1、获取数据
        const id = ctx.state.user.id
        const password = ctx.request.body.password
        console.log(id,password)
        //2、操作数据库
        try{
            if(await updateById({id,password})){
                ctx.body={
                    code:0,
                    message:'修改密码成功',
                    result:''
                }
            }
        }catch(err){
            console.err("修改密码失败",err)
            return ctx.app.emit('error',changePasswordError,ctx)
        }
     
        //3、返回结果
    }
}
module.exports = new UserController()